package com.lihepeng.leecode.solid_aim_offer.tree;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;

/**
 * 按照 之 打印
 *
 */
public class Solution77 {
    /**
     * 按照层序遍历的方式
     * 记录状态位置，flag 每一层 取反 一次
     * step1 : 遍历根节点是不是为空如果为空直接返回
     * setp2: 将根节点的数据压到辅助队列中
     *
     * @param pRoot
     * @return
     */
    public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        if (pRoot == null) {
            return null;
        }
        ArrayList<ArrayList<Integer>> result = new ArrayList<>();
        LinkedList<TreeNode> temp = new LinkedList<>();
        temp.offer(pRoot);

        boolean flag =true;
        while (!temp.isEmpty()) {
            ArrayList row = new ArrayList();
            int size = temp.size();
            flag = !flag;
            for (int i=0;i<size ;i++) {
                TreeNode treeNode = temp.poll();
                row.add(treeNode.val);
                if (treeNode.left!=null) {
                    temp.offer(treeNode.left);
                }
                if (treeNode.right !=null) {
                    temp.offer(treeNode.right);
                }

            }
            if (flag) {
                Collections.reverse(row);
            }
            result.add(row);
        }

        return result;
    }
}
